package org.jmpo;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.BeforeAll;
import static org.junit.jupiter.api.Assertions.assertEquals;

/**
 * Если мы хотим протестировать компаратор класса Student, то 
 * нам нужно будет создать компаратор. Создавать компаратор 
 * каждый раз через new - писать много повторяющегося кода.
 * Вместо этого мы можем вынести это действие в отдельный 
 * методи и аннотировать его @BeforeAll
 * Такой метод будет вызван один раз перед всеми тестами.
 * В @BeforeAll методе мы можем проводить любую предварительную
 * настройку. Следует отметить, что этот медот вызвается ДО 
 * конструирования объекта с методами-тестами, потому он 
 * должен быть статическим.
 */
public class StudentNameComparatorTest {
    private static Student.NameComparator comparator = null;

    /**
     * В этом методе мы создадим один компаратор,
     * который будет использоваться во всех тестах.
     */
    @BeforeAll
    public static void createNewComparator() {
        comparator = new Student.NameComparator();
    }

    @Test
    public void equalNameStudentsTest() {
        final var s1 = new Student(1, "Alen");
        final var s2 = new Student(2, "Alen");

        assertEquals(0, comparator.compare(s1, s2));
    }

    @Test
    public void lessNameStudentTest() {
        final var s1 = new Student(1, "Alen");
        final var s2 = new Student(2, "Boris");

        assertEquals(-1, comparator.compare(s1, s2));
    }

    @Test
    public void greaterNameStudentTest() {
        final var s1 = new Student(1, "Boris");
        final var s2 = new Student(2, "Alen");

        assertEquals(1, comparator.compare(s1, s2));
    }
}
